{{>licenseInfo}}

package {{package}}

{{#imports}}import {{import}}
{{/imports}}

import java.io.File

import org.scalatra.ScalatraServlet
import org.scalatra.swagger._
import org.json4s._
import org.json4s.JsonDSL._
import org.scalatra.json.{ JValueResult, JacksonJsonSupport }
import org.scalatra.servlet.{ FileUploadSupport, MultipartConfig, SizeConstraintExceededException }

import scala.collection.JavaConverters._

class {{classname}}(implicit val swagger: Swagger) extends ScalatraServlet
  with FileUploadSupport
  with JacksonJsonSupport
  with SwaggerSupport {
  protected implicit val jsonFormats: Formats = DefaultFormats

  protected val applicationDescription: String = "{{classname}}"

  before() {
    contentType = formats("json")
    response.headers += ("Access-Control-Allow-Origin" -> "*")
  }
{{#operations}}
{{#operation}}
  {{newline}}

  val {{nickname}}Operation = (apiOperation[{{#returnType}}{{{returnType}}}{{/returnType}}{{^returnType}}Unit{{/returnType}}]("{{nickname}}")
      summary "{{{summary}}}"
      parameters({{#allParams}}{{>queryParam}}{{>pathParam}}{{>bodyParam}}{{>formParam}}{{>headerParam}}{{#hasMore}}, {{/hasMore}}{{/allParams}})
  )

  {{httpMethod}}("{{{vendorExtensions.x-scalatra-path}}}",operation({{nickname}}Operation)) {
    {{#allParams}}
    {{#isFile}}val {{paramName}} = fileParams("{{paramName}}"){{/isFile}}
    {{^isFile}}{{#isPathParam}}
      val {{paramName}} = params.getOrElse("{{paramName}}", halt(400)){{/isPathParam}}
    {{>queryParamOperation}}{{>headerParamOperation}}{{>formParamMustache}}{{>bodyParamOperation}}
    {{/isFile}}
    println("{{paramName}}: " + {{paramName}})
  {{/allParams}}
  }

{{/operation}}
{{/operations}}
}
